home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / pao / tsr / src / aclamp.asm next >
Assembly Source File  |  1994-06-01  |  34KB  |  1,042 lines

  1. ;============================================================================
  2. ;    << MASM V5.1 >>  for  FM TOWNS
  3. ;============================================================================
  4. .186
  5.     PAGE        60,132
  6.     NAME        ACLAMP
  7.     TITLE        Access Lamp
  8. ;============================================================================
  9. ;    Access Lamp program (FMシリーズ)
  10. ;
  11. ;    ディスクアクセスの状態表示をする.
  12. ;
  13. ;    All Rights Reserved, Copyright (C) Y.Hirata 1990-1993.
  14. ;    Programmed by Y.Hirata ( NIFTY-ID : NAB03321 )
  15. ;
  16. ;    Spetial Thanks : PATCH MAN ( NIFTY-ID : NAC01123 )
  17. ;
  18. ;    < NOTE >
  19. ;    ● アセンブル方法 ●
  20. ;    中解像度: masm aclamp,aclamp50;
  21. ;    高解像度: masm /DHIGH_RESO aclamp,aclamp70;
  22. ;============================================================================
  23. code        SEGMENT
  24.             ASSUME    cs:code,ds:code,es:code,ss:code
  25. ;----------------------------------------------------------------------------
  26.             ORG        000h
  27. SEGTOP        LABEL    BYTE
  28. ;----------------------------------------------------------------------------
  29.             ORG        02Ch
  30. ENVADRS        LABEL    WORD
  31. ;----------------------------------------------------------------------------
  32.             ORG        080h
  33. ARGUMENT    LABEL    BYTE
  34. ;----------------------------------------------------------------------------
  35.             ORG        100h
  36. entry:        jmp        main
  37. ;----------------------------------------------------------------------------
  38. %HIGH_RESO    LABEL    BYTE                    ; 機種別アセンブル用
  39. ;
  40. CR            EQU        0Dh                        ;
  41. LF            EQU        0Ah                        ;
  42. BEL            EQU        07h                        ;
  43. TAB            EQU        09h                        ;
  44. EOF            EQU        1Ah                        ;
  45. ;
  46. COPYRIGHT    DB        CR
  47.             DB        01Bh,'[2K',CR,LF,BEL
  48.             DB        CR,LF,TAB
  49.             DB        'Access Lamp  Version 1.01   1993.03.02'
  50.             DB        CR,LF,TAB
  51. ;///////////////////////////////////////////;
  52. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  53.             DB        '( Middle Resolution Display Type )',CR,LF
  54. ELSE                                        ; ● 高解像度 ●
  55.             DB        '( High Resolution Display Type )',CR,LF
  56. ENDIF                                        ;
  57. ;///////////////////////////////////////////;
  58.             DB        CR,LF,TAB
  59.             DB        'Copyright (C) Y.Hirata 1990-1993.',CR,LF
  60.             DB        CR,LF,EOF
  61. ;
  62. ;///////////////////////////////////////////;
  63. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  64. TITLE_name    DB        'Access Lamp R50系'        ; 常駐チェック用文字列
  65. ELSE                                        ; ● 高解像度 ●
  66. TITLE_name    DB        'Access Lamp R70系'        ; 常駐チェック用文字列
  67. ENDIF                                        ;
  68. ;///////////////////////////////////////////;
  69. TITLE_len    EQU        $-TITLE_name            ;
  70. ;
  71. ;///////////////////////////////////////////;
  72. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  73. TVRAM        EQU        0C800h                    ; テキストVRAMセグメント
  74. KANJI        EQU        0CA00h                    ; 漢字VRAMセグメント
  75. ELSE                                        ; ● 高解像度 ●
  76. TVRAM        EQU        0F800h                    ; テキストVRAMセグメント
  77. AVRAM        EQU        0FA00h                    ; アトリビュートセグメント
  78. ENDIF                                        ;
  79. ;///////////////////////////////////////////;
  80. ;
  81. INT_TIME    EQU        97h                        ; タイマ管理BIOS
  82. INT_MODE    EQU        0                        ; 割り込みモード : インターバルモード
  83. INT_INF        EQU        0                        ; 割り込みモード使用
  84. ;
  85. DEV_CD        EQU        0C0h                    ; デバイス : CD
  86. DEV_FD        EQU        020h                    ;        : FD
  87. DEV_HD        EQU        0B0h                    ;        : HD
  88. DEV_ICM        EQU        050h                    ;        : ICメモリカード
  89. DEV_RAM        EQU        040h                    ;        : RAM
  90. DEV_SRAM    EQU        041h                    ;        : SRAM
  91. DEV_ROM        EQU        042h                    ;        : ROM
  92. DEV_BRAM    EQU        043h                    ;        : バックアップRAM
  93. ;
  94. ;****************************************************************************
  95. ;            データ領域
  96. ;****************************************************************************
  97. vct93h        DD        FAR                        ; DISK-BIOS
  98. int93flg    DB        0                        ; DISK-BIOS処理フラグ
  99. itimflg        DB        0                        ; 多重割り込み防止用
  100. ;
  101. timecnt        DW        0                        ; インターバルタイマのカウンタ
  102. parablock    DB        INT_MODE                ;
  103.             DB        0                        ;
  104.             DW        OFFSET itimhandr        ; ハンドラ・オフセット
  105.             DW        ?                        ; ハンドラ・セグメント
  106.             DW        0                        ;
  107.             DW        1                        ; 10ms のインターバル設定
  108. itimerno    DB        ?                        ; タイマ管理番号
  109. dispflg        DB        0                        ; 書き換え用(表示中フラグ)
  110. ;
  111. paraoff        LABEL    BYTE                    ;
  112. dispx        DW        68                        ; 表示位置(桁) 0~
  113. dispy        DW        24                        ; 表示位置(行) 0~
  114. funcflg        DB        0                        ; R/W以外のファンクション表示フラグ
  115. revflg        DW        0800h                    ; 反転表示
  116. eracetime    DW        50                        ; 表示消去時間(10ms単位)
  117. parasize    EQU        $-paraoff                ; パラメタ領域サイズ
  118. ;///////////////////////////////////////////;
  119. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  120. rcol        DW        2400h                    ; 反転?/強調/GREEN
  121. wcol        DW        2200h                    ; 反転?/強調/RED
  122. xcol        DW        0700h                    ; 反転?/WHITE
  123. ecol        DW        0100h                    ; BLUE
  124. ELSE                                        ; ● 高解像度 ●
  125. rcol        DW        000Ch                    ; 反転?/強調/GREEN
  126. wcol        DW        000Ah                    ; 反転?/強調/RED
  127. xcol        DW        0007h                    ; 反転?/WHITE
  128. ecol        DW        0001h                    ; BLUE
  129. ENDIF                                        ;
  130. ;///////////////////////////////////////////;
  131. ;
  132. dispcol        DW        ?                        ; 表示属性
  133. dispmsgp    DW        ?                        ; 表示メッセージ
  134. ;
  135. rax            DW        0                        ; AX
  136. ;
  137. CDmsg        DB        'CD',0                    ; CD
  138. FDmsg        DB        'FD',0                    ; FD
  139. HDmsg        DB        'HD',0                    ; HD
  140. ICMmsg        DB        'IC',0                    ; ICメモリカード
  141. ;-------------------------------------------; メモリディスク
  142. RAMmsg        DB        'RA',0                    ; RAM
  143. SRAMmsg        DB        'SR',0                    ; SRAM
  144. ROMmsg        DB        'RO',0                    ; ROM
  145. BRAMmsg        DB        'BR',0                    ; バックアップRAM
  146. ;
  147. sixteen        DB        16                        ;
  148. XXmsg        DB        'XX',0                    ; ??
  149. XXlen        EQU        $-XXmsg-1                ;
  150. ;
  151. Memdisktbl    DB        DEV_RAM                    ; メモリディスクチェックテーブル
  152.             DW        OFFSET RAMmsg            ;
  153.             DB        DEV_SRAM                ;
  154.             DW        OFFSET SRAMmsg            ;
  155.             DB        DEV_ROM                    ;
  156.             DW        OFFSET ROMmsg            ;
  157.             DB        DEV_BRAM                ;
  158.             DW        OFFSET BRAMmsg            ;
  159. Memdiskend    LABEL    BYTE                    ;
  160. ;
  161. Disktbl        DB        DEV_CD                    ; ディスクチェックテーブル(ユニット=0)
  162.             DW        OFFSET CDmsg            ;
  163.             DB        DEV_FD                    ;
  164.             DW        OFFSET FDmsg            ;
  165.             DB        DEV_HD                    ;
  166.             DW        OFFSET HDmsg            ;
  167.             DB        DEV_ICM                    ;
  168.             DW        OFFSET ICMmsg            ;
  169. Disktblend    LABEL    BYTE                    ;
  170. ;
  171. ;****************************************************************************
  172. ;            MACRO
  173. ;****************************************************************************
  174. TSREND        MACRO                            ; プログラム常駐終了(31H)
  175.             local    close                    ;
  176.             mov        cx,5                    ; デフォルトオープンファイルのクローズ
  177. close:                                        ;
  178.             mov        bx,cx                    ;
  179.             dec        bx                        ; ( 0 ~ 4 )
  180.             mov        ah,3Eh                    ; ファイルクローズ
  181.             int        21h                        ;
  182.             loop    close                    ;
  183. ;
  184.             mov        si,OFFSET ENVADRS        ; 環境変数領域を開放
  185.             mov        ax,cs:[si]                ;
  186.             mov        es,ax                    ;
  187.             mov        ah,49h                    ;
  188.             int        21h                        ;
  189. ;
  190.             mov        dx,OFFSET SEGEND        ;
  191.             add        dx,15                    ;
  192.             shr        dx,4                    ; パラグラフ単位
  193.             mov        ax,3100h                ;
  194.             int        21h                        ; 常駐終了
  195.             ENDM                            ;
  196. ;----------------------------------------------------------------------------
  197. PRGEND        MACRO                            ; プログラム終了(4CH)
  198.             mov        ax,4C00h                ;
  199.             int        21h                        ; Program End !
  200.             ENDM                            ;
  201. ;----------------------------------------------------------------------------
  202. INT93H        MACRO                            ; DISK-BIOS call
  203.             pushf                            ;
  204.             call    cs:[vct93h]                ;
  205.             ENDM                            ;
  206. ;----------------------------------------------------------------------------
  207. CONVERT        MACRO    val,base,dest            ; 数字(0~15)->文字
  208.             local    table,start                ;
  209.             jmp        short start                ;
  210. table        DB        "0123456789ABCDEF"        ;
  211. start:                                        ;
  212.             push    ax                        ;
  213.             push    bx                        ;
  214.             push    dx                        ;
  215.             mov        al,val                    ;
  216.             xor        ah,ah                    ; AH=0
  217.             xor        bx,bx                    ; BX=0
  218.             div        base                    ; AX/base->AL(商),AH(剰余)
  219.             mov        bl,al                    ;
  220.             mov        al,cs:table[bx]            ;
  221.             mov        dest,al                    ;
  222.             mov        bl,ah                    ;
  223.             mov        al,cs:table[bx]            ;
  224.             mov        dest[1],al                ;
  225.             pop        dx                        ;
  226.             pop        bx                        ;
  227.             pop        ax                        ;            
  228.             ENDM                            ;
  229. ;
  230. ;****************************************************************************
  231. ;            常駐処理部
  232. ;****************************************************************************
  233. ;----------------------------------------------------------------------------
  234. ;    テキストVRAM(ANK文字列)描画
  235. ;    < IN  >    : スタック(8バイト使用)
  236. ;    < OUT >    : 文字コード+文字属性
  237. ;----------------------------------------------------------------------------
  238. TVputs        PROC    NEAR                    ;
  239.             push    bp                        ;
  240.             mov        bp,sp                    ; スタックフレーム形成
  241.             push    ax                        ; 使用レジスタ退避
  242.             push    dx                        ;
  243.             push    bx                        ;
  244.             push    si                        ;
  245.             push    es                        ;
  246. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 引数
  247. ;            [bp+4]    x (0~)                    ; WORD: 桁
  248. ;            [bp+6]    y (0~)                    ; WORD: 行
  249. ;            [bp+8]    *str                    ; WORD: 文字列アドレス
  250. ;            [bp+10]    attr                    ; WORD: 表示属性
  251. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  252.             mov        bx,WORD PTR [bp+4]        ; x
  253.             shl        bx,1                    ;
  254. ;;            mov        ax,160                    ;
  255. ;;            imul    WORD PTR [bp+6]            ; y
  256.             mov        ax,WORD PTR [bp+6]        ; y
  257.             shl        ax,7                    ; y*128
  258.             add        bx,ax                    ;
  259.             mov        ax,WORD PTR [bp+6]        ; y
  260.             shl        ax,5                    ; y*32
  261.             add        bx,ax                    ; 2*x+160*y = offset
  262. ;///////////////////////////////////////////;
  263. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  264.             mov        ax,TVRAM                ;
  265.             mov        es,ax                    ; text vram segment
  266.             mov        si,WORD PTR [bp+8]        ; str
  267.             mov        ax,WORD PTR [bp+10]        ; attr(AHのみ使用)
  268. TVputslp:                                    ;
  269.             mov        al,BYTE PTR [si]        ;
  270.             or        al,al                    ; 文字列終端 ?
  271.             jz        short TVputsend            ; YES->TVputsend
  272. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  273. ;    WORD ACCESS                                ;
  274. ;            mov        WORD PTR es:[bx],ax        ; text vram
  275. ;            inc        bx                        ;
  276. ;            inc        bx                        ; offset update
  277. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  278. ;    BYTE ACCESS                                ; 16β互換はWORD ACCESS不可
  279.             mov        BYTE PTR es:[bx],al        ; code->text vram
  280.             inc        bx                        ;
  281.             mov        BYTE PTR es:[bx],ah        ; attr->text vram
  282.             inc        bx                        ;
  283. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  284. ELSE                                        ; ● 高解像度 ●
  285.             mov        ax,TVRAM                ;
  286.             mov        es,ax                    ; code segment
  287.             mov        si,WORD PTR [bp+8]        ; str
  288.             mov        dx,WORD PTR [bp+10]        ; attr
  289. TVputslp:                                    ;
  290.             mov        al,BYTE PTR [si]        ;
  291.             or        al,al                    ; 文字列終端 ?
  292.             jz        short TVputsend            ; YES->TVputsend
  293. ;
  294.             sub        ah,ah                    ;
  295.             mov        WORD PTR es:[bx],ax        ; code->text vram
  296.             push    es                        ;
  297.             mov        ax,AVRAM                ; attribute segment
  298.             mov        es,ax                    ;
  299.             mov        WORD PTR es:[bx],dx        ; attr->text vram
  300.             pop        es                        ;
  301.             inc        bx                        ;
  302.             inc        bx                        ; offset update
  303. ENDIF                                        ;
  304. ;///////////////////////////////////////////;
  305.             inc        si                        ;
  306.             jmp        short TVputslp            ;
  307. TVputsend:                                    ;
  308.             pop        es                        ; 使用レジスタ復元
  309.             pop        si                        ;
  310.             pop        bx                        ;
  311.             pop        dx                        ;
  312.             pop        ax                        ;
  313.             mov        sp,bp                    ; スタックフレーム開放
  314.             pop        bp                        ;
  315.             ret                                ;
  316. TVputs        ENDP                            ;
  317. ;----------------------------------------------------------------------------
  318. ;    int93hファンクション状態表示(ds=csでcall)
  319. ;    < IN  >    : dx    表示文字列先頭アドレス
  320. ;
  321. ;    < USE >    : ax
  322. ;----------------------------------------------------------------------------
  323. int93mon:                                    ;
  324.             mov        ax,dispcol                ; 表示属性
  325.             or        ax,WORD PTR revflg        ;
  326.             push    ax                        ;
  327.             mov        dispmsgp,dx                ; 文字列アドレス
  328.             push    dx                        ; str
  329.             mov        ax,dispy                ; 表示位置(行) 0~
  330.             push    ax                        ; y
  331.             mov        ax,dispx                ; 表示位置(桁) 0~
  332.             push    ax                        ; x
  333.             call    TVputs                    ; ファンクション状態表示
  334.             add        sp,8                    ;
  335.             mov        BYTE PTR dispflg,1        ; 表示中フラグセット
  336.             mov        WORD PTR timecnt,0        ; カウンタクリア
  337.             ret                                ;
  338. ;----------------------------------------------------------------------------
  339. ;    int93hファンクション状態消去(ds=csでcall)
  340. ;    < IN  >    : dx    表示文字列先頭アドレス
  341. ;
  342. ;    < USE >    : ax
  343. ;----------------------------------------------------------------------------
  344. int93erace:                                    ;
  345.             mov        ax,ecol                    ; 表示属性
  346.             push    ax                        ;
  347.             mov        dx,dispmsgp                ; 文字列アドレス
  348.             push    dx                        ; str
  349.             mov        ax,dispy                ; 表示位置(行) 0~
  350.             push    ax                        ; y
  351.             mov        ax,dispx                ; 表示位置(桁) 0~
  352.             push    ax                        ; x
  353.             call    TVputs                    ; ファンクション状態表示
  354.             add        sp,8                    ;
  355.             mov        BYTE PTR dispflg,0        ; 表示中フラグクリア
  356.             mov        WORD PTR timecnt,0        ; カウンタクリア
  357.             ret                                ;
  358. ;----------------------------------------------------------------------------
  359. ;    int93hファンクション状態表示色設定(ds=csでcall)
  360. ;    < RET >    : キャリー    onならば該当色なし
  361. ;
  362. ;    < USE >    : ax
  363. ;----------------------------------------------------------------------------
  364. setcolor:                                    ;
  365.             mov        ax,rax                    ; DISK-BIOS呼出時のAX
  366.             cmp        ah,05h                    ; read ?
  367.             jne        short setcol_wchk        ; NO->次のチェック
  368.             mov        ax,rcol                    ;
  369.             mov        dispcol,ax                ;
  370.             jmp        short setcol_dev        ;
  371. setcol_wchk:                                ;
  372.             cmp        ah,06h                    ; write ?
  373.             jne        short setcol_echk        ; NO->その他へ
  374.             mov        ax,wcol                    ;
  375.             mov        dispcol,ax                ;
  376.             jmp        short setcol_dev        ;
  377. setcol_echk:                                ;
  378.             cmp        BYTE PTR funcflg,1        ; R/W以外のファンクション表示 ?
  379.             je        short setcol_etc        ; YES->色設定
  380.             jmp        short setcol_end        ; NO ->終了
  381. setcol_etc:                                    ;
  382.             mov        ax,xcol                    ; その他
  383.             mov        dispcol,ax                ;
  384. setcol_dev:                                    ;
  385.             clc                                ;
  386.             ret                                ;
  387. setcol_end:                                    ;
  388.             stc                                ; キャリーon
  389.             ret                                ;
  390. ;----------------------------------------------------------------------------
  391. ;    int93hファンクション状態表示メッセージ設定
  392. ;    (ds=csでcall)
  393. ;    < IN  >    : ax    DISK-BIOS呼出時のAX
  394. ;    < RET >    : dx    表示文字列先頭アドレス
  395. ;
  396. ;    < USE >    : ax, si
  397. ;----------------------------------------------------------------------------
  398. setmessage:                                    ;
  399.             mov        ax,rax                    ; DISK-BIOS呼出時のAX
  400.             mov        si,OFFSET Memdisktbl    ;
  401. setmsg_lp1:                                    ; メモリディスクチェック
  402.             cmp        al,[si]                    ;
  403.             je        short setmsg_disk        ;
  404.             add        si,3                    ;
  405.             cmp        si,OFFSET Memdiskend    ;
  406.             jne        short setmsg_lp1        ;
  407. ;
  408.             and        al,0F0h                    ; ユニット番号無視
  409.             mov        si,OFFSET Disktbl        ;
  410. setmsg_lp2:                                    ; ディスクチェック
  411.             cmp        al,[si]                    ;
  412.             je        short setmsg_disk        ;
  413.             add        si,3                    ;
  414.             cmp        si,OFFSET Disktblend    ;
  415.             jne        short setmsg_lp2        ;
  416.             jmp        short setmsg_xx            ;
  417. setmsg_disk:                                ; ディスク処理
  418.             mov        dx,[si+1]                ;
  419.             ret                                ;
  420. setmsg_xx:                                    ; 不明デバイス処理
  421.             mov        ax,rax                    ; その他
  422.             CONVERT    al,sixteen,XXmsg[0]        ; AL
  423.             mov        dx,OFFSET XXmsg            ; ??
  424.             ret                                ;
  425. ;----------------------------------------------------------------------------
  426. ;    インターバルタイマ割り込み処理                    ; タイマ管理BIOS使用
  427. ;----------------------------------------------------------------------------
  428. itimhandr    PROC    FAR                        ; 割り込みハンドラ
  429.             cli                                ;
  430.             cmp        BYTE PTR cs:itimflg,1    ; 処理中 ?
  431.             jne        short itim_st            ; NO->処理開始
  432.             sti                                ;
  433.             ret                                ;
  434. itim_st:                                    ;
  435.             mov        BYTE PTR cs:itimflg,1    ; 処理中フラグセット
  436.             mov        ax,cs                    ;
  437.             mov        ds,ax                    ;
  438.             mov        es,ax                    ; es=ds=cs
  439.             cld                                ;
  440.             cmp        BYTE PTR int93flg,1        ; DISK-BIOS処理あり ?
  441.             je        short itim_dispchk        ; YES->表示処理開始
  442.             jmp        short itim_eracechk        ; NO ->消去処理へ
  443. itim_dispchk:                                ;
  444.             call    setcolor                ; 表示色設定
  445.             jc        short itim_dispend        ;
  446.             call    setmessage                ; 表示メッセージ設定
  447. itim_disp:                                    ;
  448.             call    int93mon                ; ファンクション状態表示
  449. itim_dispend:                                ;
  450.             mov        BYTE PTR int93flg,0        ; DISK-BIOS処理フラグクリア
  451.             jmp        short itim_end            ;
  452. itim_eracechk:                                ;
  453.             cmp        BYTE PTR dispflg,1        ; 表示中 ?
  454.             jne        short itim_end            ; NO->終了
  455.             mov        ax,eracetime            ;
  456.             cmp        timecnt,ax                ;
  457.             jae        short itim_erace        ; 表示消去時間以上ならば消去
  458.             inc        WORD PTR timecnt        ; カウントアップ
  459.             jmp        short itim_end            ;
  460. itim_erace:                                    ;
  461.             call    int93erace                ; 表示消去
  462. itim_end:                                    ;
  463.             mov        BYTE PTR cs:itimflg,0    ; 処理中フラグクリア
  464.             sti                                ;
  465.             ret                                ;
  466. itimhandr    ENDP                            ;
  467. ;----------------------------------------------------------------------------
  468. ;    DISK-BIOSの横取り処理
  469. ;----------------------------------------------------------------------------
  470. INT93hook    PROC    FAR                        ;
  471.             mov        cs:rax,ax                ; DISK-BIOS呼出時のAX保存
  472.             INT93H                            ; DISK-BIOS call
  473.             mov        BYTE PTR cs:int93flg,1    ; DISK-BIOS処理フラグセット
  474.             sti                                ; 割り込み許可
  475.             ret        2                        ; フラグをpopせずに,iretをシミュレート
  476. INT93hook    ENDP                            ;
  477. ;----------------------------------------------------------------------------
  478. SEGEND        LABEL    BYTE                    ; ↑ここまでを常駐
  479. ;----------------------------------------------------------------------------
  480. ;
  481. ;****************************************************************************
  482. ;            非常駐処理部
  483. ;****************************************************************************
  484. ;----------------------------------------------------------------------------
  485. ;    文字列表示(^C無効)
  486. ;    < IN  >    : ds:si    文字列格納位置    
  487. ;
  488. ;    < USE >    : si
  489. ;----------------------------------------------------------------------------
  490. puts        PROC    NEAR                    ;
  491.             push    dx                        ;
  492. putslp:                                        ;
  493.             mov        dl,[si]                    ;
  494.             or        dl,dl                    ; 文字列終端 ?
  495.             jz        short putsend            ; YES->終了
  496.             mov        ah,02                    ;
  497.             int        21h                        ; 文字表示
  498.             inc        si                        ;
  499.             jmp        short putslp            ;
  500. putsend:                                    ;
  501.             pop        dx                        ;
  502.             ret                                ;
  503. puts        ENDP                            ;
  504. ;----------------------------------------------------------------------------
  505. ;    表示クリア(ds=csでcall)
  506. ;
  507. ;    < USE >    : ax
  508. ;----------------------------------------------------------------------------
  509. dispclr:                                    ;
  510. ;///////////////////////////////////////////;
  511. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  512.             mov        ax,0700h                ; 白
  513. ELSE                                        ; ● 高解像度 ●
  514.             mov        ax,0007h                ; 白
  515. ENDIF                                        ;
  516. ;///////////////////////////////////////////;
  517.             push    ax                        ;
  518.             mov        ax,OFFSET clrmsg        ; 文字列アドレス
  519.             push    ax                        ; str
  520.             mov        ax,_dispy                ; 表示位置(行) 0~
  521.             push    ax                        ; y
  522.             mov        ax,_dispx                ; 表示位置(桁) 0~
  523.             push    ax                        ; x
  524.             call    TVputs                    ;
  525.             add        sp,8                    ;
  526.             ret                                ;
  527. ;----------------------------------------------------------------------------
  528. ;    DISK-BIOSベクタ取得(ds=csでcall)
  529. ;    < RET >    : es:bx    ベクタアドレス
  530. ;----------------------------------------------------------------------------
  531. getvct:                                        ;
  532.             mov        ax,3593h                ;
  533.             int        21h                        ; DISK-BIOS割込みベクタ取得
  534.             mov        WORD PTR vct93h,bx        ;
  535.             mov        WORD PTR vct93h+2,es    ; 本来のDISK-BIOSベクタの取得・保存
  536.             ret                                ;
  537. ;----------------------------------------------------------------------------
  538. ;    常駐文字列チェック(ds=csでcall)
  539. ;    < IN  >    : es    常駐セグメント
  540. ;    < RET >    : ゼロフラグ (等しければ, ゼロフラグon)
  541. ;
  542. ;    < USE >    : si, di
  543. ;----------------------------------------------------------------------------
  544. tsrcmp:                                        ;
  545.             mov        cx,TITLE_len            ;
  546.             mov        si,OFFSET TITLE_name    ; ds:si
  547.             mov        di,OFFSET TITLE_name    ; es:di
  548.     repz    cmpsb                            ; 常駐チェック
  549.             ret                                ;
  550. ;----------------------------------------------------------------------------
  551. ;    常駐チェック(ds=csでcall)
  552. ;    < RET >    : es:bx    常駐アドレス
  553. ;
  554. ;    < USE >    : ax, si, di
  555. ;----------------------------------------------------------------------------
  556. tsr_chk:                                    ;
  557.             mov        BYTE PTR tsrflg,0        ; 常駐フラグクリア
  558.             mov        BYTE PTR hookflg,0        ; ベクタフックフラグクリア
  559. mcb_chk:                                    ;
  560.             mov        ah,52h                    ; 内部変数領域アドレス取得
  561.             int        21h                        ;
  562.             mov        es,es:[bx-2]            ; 先頭MCBセグメントアドレス
  563. mcb_lp:                                        ;
  564.             cmp        BYTE PTR es:[0],'Z'        ; 最終MCB ?
  565.             je        short mcb_end            ; YES->終了
  566.             cmp        BYTE PTR es:[0],'M'        ; MCB ?
  567.             jne        short mcb_err            ; NO ->MCB MARK ERROR
  568. mcb_idchk:                                    ;
  569.             push    es                        ; MCBセグメント退避
  570.             mov        es,WORD PTR es:[1]        ; PSPセグメント(Owner ID)
  571.             mov        ax,es                    ;
  572.             cmp        ax,pspseg                ; 起動プログラムのPSPか ?
  573.             je        short mcb_next            ; YES->次のMCBをチェック
  574.             call    tsrcmp                    ; 常駐文字列照合
  575.             jz        short mcb_on            ; 等しければ, 常駐済
  576. mcb_next:                                    ;
  577.             pop        es                        ; MCBセグメント復元
  578.             mov        ax,es                    ;
  579.             add        ax,es:[3]                ; 使用メモリのパラグラフ数加算
  580.             inc        ax                        ; 次のMCBセグメント
  581.             mov        es,ax                    ;
  582.             jmp        short mcb_lp            ;
  583. mcb_on:                                        ; 常駐済
  584.             pop        ax                        ; スタック調整
  585.             mov        BYTE PTR tsrflg,1        ;
  586. mcb_end:                                    ; 非常駐
  587.             push    bx                        ;
  588.             push    es                        ;
  589.             call    getvct                    ; DISK-BIOS割込みベクタ取得
  590.             pop        es                        ;
  591.             pop        bx                        ;
  592. vctchk_00:                                    ;
  593.             mov        ax,es                    ;
  594.             cmp        WORD PTR vct93h+2,ax    ; 常駐セグメント比較
  595.             je        short vctchk_99            ;
  596.             mov        BYTE PTR hookflg,1        ; ベクタフックされている
  597. vctchk_99:                                    ;
  598.             ret                                ;
  599. mcb_err:                                    ;
  600.             mov        si,OFFSET msg6            ; MCBエラー
  601.             call    puts                    ;
  602.             ret                                ;
  603. ;----------------------------------------------------------------------------
  604. ;    インターバルタイマの登録(ds=cs)
  605. ;    < RET >    : ax    タイマ管理BIOSの返り値
  606. ;----------------------------------------------------------------------------
  607. itim_setup:                                    ;
  608.             push    di                        ;
  609.             mov        WORD PTR [parablock+4],cs
  610.             mov        di,OFFSET parablock        ;
  611.             xor        ax,ax                    ;
  612.             int        INT_TIME                ;
  613.             mov        itimerno,al                ; タイマ管理番号
  614.             pop        di                        ;
  615.             ret                                ;
  616. ;----------------------------------------------------------------------------
  617. ;    インターバルタイマの取消
  618. ;    < IN  >    : es    常駐セグメント
  619. ;    < RET >    : ax    タイマ管理BIOSの返り値
  620. ;----------------------------------------------------------------------------
  621. itim_release:                                ;
  622.             mov        ah,01h                    ;
  623.             mov        al,es:itimerno            ; 常駐部分のタイマ番号
  624.             int        INT_TIME                ;
  625.             ret                                ;
  626. ;----------------------------------------------------------------------------
  627. ;    プログラム名の設定(es=ds=csでcall)
  628. ;    常駐時の識別用として, コマンドライン領域にプログラム名を複写しておく.
  629. ;----------------------------------------------------------------------------
  630. setpname:                                    ;
  631.             mov        si,OFFSET prgname        ;
  632.             mov        di,OFFSET ARGUMENT        ;
  633.             mov        cx,prgnamelen            ;
  634.     rep        movsb                            ; ds:si->es:di
  635.             ret                                ;
  636. ;----------------------------------------------------------------------------
  637. ;    起動処理( メイン )
  638. ;----------------------------------------------------------------------------
  639. main        PROC    NEAR                    ;
  640.             mov        WORD PTR pspseg,es        ; PSPセグメント保存
  641. ;
  642. ; COMファイルとするのでコメントとする.
  643. ;            mov        ax,cs                    ;
  644. ;            mov        ds,ax                    ;
  645. ;            mov        es,ax                    ;
  646. ;            mov        ss,ax                    ; ss=es=ds=cs
  647.             cli                                ; 割り込み禁止
  648.             cld                                ;
  649. ;
  650.             mov        si,OFFSET msg0            ; オープニングメッセージ(文字列)
  651.             call    puts                    ;
  652.             call    tsr_chk                    ; 常駐チェック
  653.             cmp        BYTE PTR tsrflg,0        ; 常駐していない ?
  654.             jz        short arg_chk            ; YES->arg_chk
  655. ;
  656.             push    ds                        ; 常駐領域内パラメタを複写
  657.             push    es                        ;
  658.             mov        ax,es                    ;
  659.             push    ds                        ;
  660.             pop        es                        ;
  661.             mov        ds,ax                    ; ds<->es
  662.             mov        si,OFFSET paraoff        ;
  663.             mov        di,OFFSET paraoff        ;
  664.             mov        cx,parasize                ; パラメタ領域サイズ(アップデート用)
  665.     rep        movsb                            ; ds:si->es:di
  666.             mov        si,OFFSET paraoff        ;
  667.             mov        di,OFFSET _paraoff        ;
  668.             mov        cx,parasize                ; パラメタ領域サイズ(保持用)
  669.     rep        movsb                            ; ds:si->es:di
  670.             pop        es                        ;
  671.             pop        ds                        ;
  672. arg_chk:                                    ;
  673.             sti                                ;
  674.             call    argchk                    ; 引数のチェック
  675.             mov        al,argflg                ;
  676.             or        al,al                    ; al=0 ?
  677.             jz        short tsr_init            ; YES->通常処理開始へ
  678.             mov        si,OFFSET usage            ; ヘルプメッセージ
  679.             call    puts                    ;
  680.             PRGEND                            ;
  681. tsr_init:                                    ;
  682.             mov        al,tsrflg                ;
  683.             or        al,al                    ;
  684.             jz        short mem_noclr            ; 終了
  685. ;-------------------------------------------;
  686. ;    常駐解除処理
  687. ;-------------------------------------------;
  688. mem_clear:                                    ;
  689.             mov        al,relflg                ; 常駐解除フラグ
  690.             or        al,al                    ; 常駐解除しない ?
  691.             jz        short mem_update        ; YES->終了
  692. mem_clrchk:                                    ;
  693.             cmp        BYTE PTR hookflg,0        ; ベクタフックされていないか ?
  694.             je        short mem_clear_ok        ; YES->常駐解除
  695.             mov        si,OFFSET msg8            ; 常駐解除不可メッセージ
  696.             call    puts                    ;
  697.             PRGEND                            ;
  698. mem_clear_ok:                                ;
  699.             push    ds                        ;
  700.             lds        dx,DWORD PTR es:vct93h    ;
  701.             mov        ax,2593h                ; DISK-BIOSを元のベクタに!
  702.             int        21h                        ;
  703.             call    itim_release            ; インターバルタイマの解除
  704. ;
  705. ; 常駐時に開放するようにしたので, コメントとする.
  706. ;            push    es                        ;
  707. ;            mov        si,OFFSET ENVADRS        ; 環境変数領域を開放
  708. ;            mov        ax,es:[si]                ;
  709. ;            mov        es,ax                    ;
  710. ;            mov        ah,49h                    ;
  711. ;            int        21h                        ;
  712. ;            pop        es                        ;
  713. ;
  714.             mov        ah,49h                    ; プログラムを開放
  715.             int        21h                        ;
  716.             pop        ds                        ;
  717.             jc        short mem_clrerr        ; メモリ開放失敗
  718.             mov        si,OFFSET msg2            ; 開放メッセージ
  719.             jmp        short mem_clrend        ;
  720. mem_clrerr:                                    ;
  721.             mov        si,OFFSET msg7            ; メモリ開放失敗メッセージ
  722. mem_clrend:                                    ;
  723.             call    puts                    ;
  724.             call    dispclr                    ; 表示クリア
  725.             PRGEND                            ;
  726. ;
  727. mem_update:                                    ; 常駐領域内のパラメタ値変更
  728.             mov        si,OFFSET msg3            ; 常駐済メッセージ
  729.             call    puts                    ;
  730.             mov        al,optflg                ;
  731.             or        al,al                    ; オプション指定なし ?
  732.             jz        short mem_upend            ; YES->終了
  733.             cli                                ;
  734.             call    dispclr                    ; 表示クリア
  735.             mov        si,OFFSET paraoff        ;
  736.             mov        di,OFFSET paraoff        ;
  737.             mov        cx,parasize                ; パラメタ領域サイズ
  738.     rep        movsb                            ; ds:si->es:di
  739.             sti                                ;
  740.             mov        si,OFFSET msg5            ; アップデートメッセージ(文字数)
  741.             call    puts                    ;
  742. mem_upend:                                    ;
  743.             PRGEND                            ;
  744. ;
  745. mem_noclr:                                    ;
  746.             mov        al,relflg                ; 常駐解除フラグ
  747.             or        al,al                    ;
  748.             jz        short mem_setup            ;
  749.             mov        si,OFFSET msg4            ; 非常駐メッセージ
  750.             call    puts                    ;
  751.             PRGEND                            ;
  752. ;-------------------------------------------;
  753. ;    常駐処理
  754. ;-------------------------------------------;
  755. mem_setup:                                    ;
  756.             push    cs                        ;
  757.             pop        es                        ; es=cs
  758.             call    setpname                ;
  759.             mov        si,OFFSET msg1            ; 常駐メッセージ
  760.             call    puts                    ;
  761. ;
  762.             call    itim_setup                ; インターバルタイマ設定
  763.             mov        dx,OFFSET INT93hook        ; 常駐処理プロシジャを
  764.             mov        ax,2593h                ; ベクタセット
  765.             int        21h                        ; (DISK-BIOS)
  766. ;
  767.             TSREND                            ; 常駐終了
  768. ;----------------------------------------------------------------------------
  769. ;    引数のチェック
  770. ;----------------------------------------------------------------------------
  771. argchk:                                        ; 引数のチェック
  772.             mov        bx,OFFSET ARGUMENT        ;
  773.             mov        BYTE PTR optflg,0        ;
  774. arglp:                                        ;
  775.             inc        bx                        ;
  776.             mov        al,[bx]                    ;
  777.             cmp        al,0DH                    ;
  778.             jne        short optchk            ;
  779.             ret                                ; 引数チェック終了
  780. optchk:                                        ; 引数チェック開始
  781.             cmp        al,'-'                    ; オプションスイッチは'-','/'で始まる.
  782.             je        short optsw1            ;
  783.             cmp        al,'/'                    ;
  784.             je        short optsw1            ;
  785.             cmp        al,' '                    ; SPACE
  786.             je        short arglp                ;
  787.             cmp        al,9H                    ; TAB
  788.             je        short arglp                ;
  789.             jmp        opterr                    ;
  790. optsw1:                                        ;
  791.             inc        bx                        ;
  792.             mov        al,[bx]                    ;
  793.             or        al,20H                    ; 大文字->小文字
  794.             cmp        al,'r'                    ; 'r','R'か ?
  795.             jne        short optsw2            ; NO->次のチェックへ
  796.             mov        BYTE PTR relflg,1        ; 常駐解除フラグ ON
  797.             jmp        short arglp                ;
  798. optsw2:                                        ; R/W以外のファンクション表示
  799.             cmp        al,'f'                    ; 'f'か ?
  800.             jne        short optsw3            ; NO->次のチェックへ
  801.             call    atoi                    ;
  802.             cmp        BYTE PTR valflg,0        ; 数値指定あり ?
  803.             jne        short optsw2chk            ; YES->数値チェックへ
  804.             mov        BYTE PTR funcflg,0        ; 表示フラグ標準値設定
  805.             jmp        short optswon            ;
  806. optsw2chk:                                    ;
  807.             cmp        ax,0                    ;
  808.             jb        short opterr_00            ; 0よりも小さければエラー
  809.             cmp        ax,1                    ;
  810.             ja        short opterr_00            ; 1よりも大きければエラー
  811.             mov        funcflg,al                ; 表示フラグ格納
  812.             jmp        short optswon            ;
  813. optsw3:                                        ; 反転表示
  814.             cmp        al,'v'                    ; 'v'か ?
  815.             jne        short optsw4            ; NO->次のチェックへ
  816.             call    atoi                    ;
  817.             cmp        BYTE PTR valflg,0        ; 数値指定あり ?
  818.             jne        short optsw3chk            ; YES->数値チェックへ
  819.             mov        WORD PTR revflg,0800h    ; 反転表示フラグ標準値設定
  820.             jmp        short optswon            ;
  821. optsw3chk:                                    ;
  822.             or        ax,ax                    ;
  823.             jnz        short optsw3chk2        ; 0以外は次のチェックへ
  824.             mov        revflg,ax                ;
  825.             jmp        short optswon            ;
  826. optsw3chk2:                                    ;
  827.             cmp        ax,1                    ;
  828.             jne        short opterr_00            ; 1でなければエラー
  829.             mov        WORD PTR revflg,0800h    ; 反転表示フラグ格納
  830.             jmp        short optswon            ;
  831. optsw4:                                        ; 表示位置(桁)
  832.             cmp        al,'x'                    ; 'x'か ?
  833.             jne        short optsw5            ; NO->次のチェックへ
  834.             call    atoi                    ;
  835.             cmp        BYTE PTR valflg,0        ; 数値指定あり ?
  836.             jne        short optsw4chk            ; YES->数値チェックへ
  837.             mov        WORD PTR dispx,68        ; 表示位置(桁)標準値設定
  838.             jmp        short optswon            ;
  839. optsw4chk:                                    ;
  840.             cmp        ax,1                    ;
  841.             jb        short opterr            ; 1よりも小さければエラー
  842.             cmp        ax,80                    ;
  843.             ja        short opterr            ; 80よりも大きければエラー
  844.             dec        ax                        ; xは0~79
  845.             mov        dispx,ax                ; 表示位置(桁)格納
  846.             jmp        short optswon            ;
  847. opterr_00:                                    ; 中継
  848.             jmp        short opterr            ; エラーへ
  849. arglp_00:                                    ; 中継
  850.             jmp        arglp                    ; 次の引数処理へ
  851. optpause:                                    ;
  852.             mov        al,[bx+1]                ;
  853.             cmp        al,' '                    ; SPACE
  854.             je        short arglp_00            ;
  855.             cmp        al,9H                    ; TAB
  856.             je        short arglp_00            ;
  857.             cmp        al,0DH                    ; 終了
  858.             je        short arglp_00            ;
  859.             jmp        optsw1                    ;
  860. optswon:                                    ;
  861.             mov        BYTE PTR optflg,1        ; オプションスイッチ ON
  862.             jmp        short optpause            ;
  863. optsw5:                                        ; 表示位置(行)
  864.             cmp        al,'y'                    ; 'y'か ?
  865.             jne        short optsw6            ; NO->次のチェックへ
  866.             call    atoi                    ;
  867.             cmp        BYTE PTR valflg,0        ; 数値指定なし ?
  868.             jne        short optsw5chk            ; NO->数値チェックへ
  869.             mov        WORD PTR dispy,24        ; 表示位置(行)標準値設定
  870.             jmp        short optswon            ;
  871. optsw5chk:                                    ;
  872. ;///////////////////////////////////////////;
  873. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  874.             cmp        ax,1                    ;
  875.             jb        short opterr            ; 1よりも小さければエラー
  876.             cmp        ax,25                    ;
  877.             ja        short opterr            ; 25よりも大きければエラー
  878.             dec        ax                        ; yは0~24
  879.             mov        dispy,ax                ; 表示位置(行)格納
  880. ELSE                                        ; ● 高解像度 ●
  881.             cmp        ax,1                    ;
  882.             jb        short opterr            ; 1よりも小さければエラー
  883.             cmp        ax,30                    ;
  884.             ja        short opterr            ; 30よりも大きければエラー
  885.             dec        ax                        ; yは0~29
  886.             mov        dispy,ax                ; 表示位置(行)格納
  887. ENDIF                                        ;
  888. ;///////////////////////////////////////////;
  889.             jmp        short optswon            ;
  890. optsw6:                                        ; 表示消去時間
  891.             cmp        al,'t'                    ; 't'か ?
  892.             jne        short opterr            ; NO->次のチェックへ
  893.             call    atoi                    ;
  894.             cmp        BYTE PTR valflg,0        ; 数値指定あり ?
  895.             jne        short optsw6chk            ; YES->数値チェックへ
  896.             mov        WORD PTR eracetime,50    ; 表示消去時間標準値設定
  897.             jmp        short optswon            ;
  898. optsw6chk:                                    ;
  899.             cmp        ax,10                    ;
  900.             jb        short opterr            ; 10よりも小さければエラー
  901.             cmp        ax,100                    ;
  902.             ja        short opterr            ; 100よりも大きければエラー
  903.             mov        eracetime,ax            ; 表示消去時間格納
  904.             jmp        short optswon            ;
  905. opterr:                                        ; オプションスイッチエラー
  906.             mov        BYTE PTR argflg,1        ;
  907.             ret                                ;
  908. ;----------------------------------------------------------------------------
  909. ;    文字列を整数に変換
  910. ;    < IN  >    : ds:bx    文字列の先頭位置-1
  911. ;    < RET >    : ax    整数値
  912. ;
  913. ;    < USE >    : bx, cx, dx
  914. ;----------------------------------------------------------------------------
  915. atoi:                                        ;
  916.             inc        bx                        ;
  917.             xor        ax,ax                    ; ax=0
  918.             xor        dx,dx                    ; dx=0
  919.             xor        ch,ch                    ; ch=0
  920.             mov        BYTE PTR valflg,0        ;
  921. atoi_next:                                    ;
  922.             mov        cl,[bx]                    ; 文字コード取得
  923.             sub        cl,'0'                    ; 文字->数字
  924.             jb        short atoi_end            ; '0'よりも小さければ終わり
  925.             cmp        cl,9                    ; '9'よりも大きいか ?
  926.             ja        short atoi_end            ; YESならば終わり
  927.             push    cx                        ;
  928.             mov        cx,0AH                    ;
  929.             imul    cx                        ; AXを10倍する
  930.             pop        cx                        ;
  931.             add        ax,cx                    ; AXに新値を格納
  932.             inc        bx                        ; 次の文字位置
  933.             mov        BYTE PTR valflg,1        ;
  934.             jmp        short atoi_next            ;
  935. atoi_end:                                    ;
  936.             dec        bx                        ; 先読み分を戻す
  937.             ret                                ;
  938. ;
  939. main        ENDP                            ;
  940. ;-------------------------------------------; 起動前の値を保持する領域
  941. _paraoff    LABEL    BYTE                    ;
  942. _dispx        DW        0                        ; 表示位置(桁) 0~
  943. _dispy        DW        24                        ; 表示位置(行) 0~
  944. _funcflg    DB        0                        ; R/W以外のファンクション表示フラグ
  945. _revflg        DW        0800h                    ; 反転表示
  946. _eracetime    DW        50                        ; 表示消去時間(10ms単位)
  947. ;-------------------------------------------;
  948. tsrflg        DB        0                        ; 常駐フラグ
  949. argflg        DB        0                        ; 引数チェックフラグ
  950. optflg        DB        0                        ; オプションフラグ
  951. valflg        DB        0                        ; オプション数値フラグ
  952. relflg        DB        0                        ; 常駐解除フラグ
  953. hookflg        DB        0                        ; ベクタフックフラグ
  954. ;
  955. pspseg        DW        ?                        ; PSPセグメント
  956. prgname        DB        12,'ACLAMP v1.01',0Dh    ;
  957. prgnamelen    EQU        $-prgname                ;
  958. ;
  959. msg0        DB        CR,LF,'Access Lamp  Version 1.01'
  960.             DB        '  (C)パオパオ 1990-1993. '
  961.             DB        CR,LF,0
  962. msg1        DB        '★ 常駐します ★',CR,LF,0
  963. msg2        DB        '☆ 常駐解除しました ☆',CR,LF,0
  964. msg3        DB        '常駐しています.',CR,LF,0
  965. msg4        DB        '常駐していません.',CR,LF,BEL,0
  966. msg5        DB        'オプションパラメタ値を更新しました.',CR,LF,BEL,0
  967. msg6        DB        'メモリの状態が正しくありません.',CR,LF,BEL,0
  968. msg7        DB        'メモリの開放に失敗しました.',CR,LF,BEL,0
  969. msg8        DB        'ベクタをフックされているため, 常駐解除できません.'
  970.             DB        CR,LF,BEL,0
  971. ;
  972. clrmsg        DB        '  ',0
  973. ;
  974. usage        DB        "Usage: 'ACLAMP "
  975.             DB        "[-r] [-f[n]] [-v[n]] [-x[n]] [-y[n]] [-t[n]]'"
  976.             DB        CR,LF
  977.             DB        '        -r       常駐解除       ',CR,LF
  978.             DB        '        -f[n]    R/W以外も表示  '
  979.             DB        'n: 0=しない, 1=する,   標準: 0',CR,LF
  980.             DB        '        -v[n]    反転表示       '
  981.             DB        'n: 0=しない, 1=する,   標準: 1',CR,LF
  982.             DB        '        -x[n]    表示桁位置     '
  983.             DB        'n: 1~80,              標準: 69',CR,LF
  984.             DB        '        -y[n]    表示行位置     '
  985. ;///////////////////////////////////////////;
  986. IFNDEF HIGH_RESO                            ; ● 中解像度 ●
  987.             DB        'n: 1~25,              標準: 25(最下行)',CR,LF
  988. ELSE                                        ; ● 高解像度 ●
  989.             DB        'n: 1~30,              標準: 25(最下行)',CR,LF
  990. ENDIF                                        ;
  991. ;///////////////////////////////////////////;
  992.             DB        '        -t[n]    表示消去時間   '
  993.             DB        'n: 10~100 (単位10ms), 標準: 50(0.5秒)',CR,LF
  994.             DB        0
  995. ;
  996. code        ENDS                            ;
  997.             END        entry                    ;
  998. ;
  999. ;============================================================================
  1000. ;    アトリビュート
  1001. ;
  1002. ;    Middle Resolution Display Type
  1003. ;
  1004. ;       7   6   5   4   3   2   1   0
  1005. ;    ┌─┬─┬─┬─┬─┬─┬─┬─┐
  1006. ;    └─┴─┴─┴─┴─┴─┴─┴─┘
  1007. ;      0  ↓   I  BLK REV  G   R   B
  1008. ;         KANJI
  1009. ;    .........................................................................
  1010. ;
  1011. ;    High Resolution Display Type
  1012. ;
  1013. ;       7   6   5   4   3   2   1   0
  1014. ;    ┌─┬─┬─┬─┬─┬─┬─┬─┐
  1015. ;    └─┴─┴─┴─┴─┴─┴─┴─┘
  1016. ;      0   0   0   0   I   G   R   B
  1017. ;
  1018. ;      15  14  13  12  11  10   9   8
  1019. ;    ┌─┬─┬─┬─┬─┬─┬─┬─┐
  1020. ;    └─┴─┴─┴─┴─┴─┴─┴─┘
  1021. ;      0  SCT UNS BLK REV VTL OVL UNL
  1022. ;    .........................................................................
  1023. ;
  1024. ;        G R B            G R B            G R B            G R B
  1025. ;    黒  0 0 0        青    0 0 1        赤    0 1 0        紫    0 1 1
  1026. ;    緑  1 0 0        水    1 0 1        黄    1 1 0        白    1 1 1
  1027. ;============================================================================
  1028. ;
  1029. ;    < HISTORY >
  1030. ;============================================================================
  1031. ;    1990.05.20 : CREATE
  1032. ;    1990.06.02 : V0.70  ROM,RAM にも対応。
  1033. ;    1990.06.03 : V0.71  細かい修正 etc.
  1034. ;    1991.08.31 : V0.72  メッセージ出力をDOSファンクション使用に変更.
  1035. ;    1992.10.23 : FMRのテキストVRAM直書に変更. (FMR50/FMR70用に別々アセンブルする)
  1036. ;    1992.11.01 : ディスクBIOSに対する影響を最小限にするため, インターバルタイマ割り込み
  1037. ;                 で表示/消去をするようにした.
  1038. ;    1992.11.15 : MCBチェックにより, 再常駐しないようにした.
  1039. ;    1993.03.02 : 常駐時にデフォルトオープンファイルをクローズするようにした.
  1040. ;============================================================================
  1041.  
  1042.